﻿#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

//typedef int QDataType;
typedef struct BinaryTreeNode* QDataType;
typedef struct QueueNode
{
	QDataType data;
	struct QueueNode* next;
}QueueNode;

 typedef struct Queue
{
	struct QueueNode* phead;
	struct QueueNode* ptail;
	int size;//保持队列有效数据个数
}Queue;

 //初始化队列
 void QueueInit(Queue* pq);

 // ⼊队列，队尾
 void QueuePush(Queue* pq, QDataType x);

 //队列判空
 bool QueueEmpty(Queue* pq);

 // 出队列，队头
 void QueuePop(Queue* pq);

 //取队头数据
 QDataType QueueFront(Queue* pq);

 //取队尾数据
 QDataType QueueBack(Queue* pq);

 //队列有效元素个数
 int QueueSize(Queue* pq);

 //销毁队列
 void QueueDestroy(Queue* pq);